package com.muyu.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @ClassName: SwaggerConfig
 * @Author: Zirun.Xin
 * @Date: 2025/3/20 下午1:53
 * @Version: 1.0
 * @Description: swagger配置
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    /**
     * 创建并配置 Docket Bean，它是 Swagger 文档的核心组件。
     * @return 配置好的 Docket 实例
     */
    @Bean
    public Docket customDocket() {
        // 使用 SWAGGER_2 文档类型
        return new Docket(DocumentationType.SWAGGER_2)
                // 设置 API 文档的信息（标题、作者、描述等）
                .apiInfo(apiInfo())
                // 启动 API 选择器的构建过程
                .select()
                // 指定要扫描的包，仅包含该包下的控制器
                .apis(RequestHandlerSelectors.basePackage("com.muyu.controller"))
                // 包含所有路径，可以使用 PathSelectors.regex 或 PathSelectors.ant 来指定特定路径
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * 构建 ApiInfo 对象，包含 API 文档的详细信息，如标题、描述、版本等。
     * @return 包含 API 文档详细信息的 ApiInfo 实例
     */
    public ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 设置文档标题
                .title("knife4j在线接口文档")
                // 设置联系人信息
                .contact(new Contact("xinzirun", "", "xinzirun0227@163.com"))
                // 设置文档描述
                .description("swagger-bootstrap-ui")
                // 设置服务条款URL
                .termsOfServiceUrl("http://47.122.92.9:10007")
                // 设置文档版本
                .version("v1.0")
                .build();
    }
}
